//
//  File.swift
//  
//
//  Created by chenlongmingob@gmail.com on 2020/12/30.
//

import Foundation

public struct LightSource {
    public var angle: Angle
    public var category: Category
    
    public var byte: UInt8 {
        return angle.rawValue << 7 + category.rawValue
    }
    
    public init(byte: UInt8) {
        angle = Angle(rawValue: byte >> 7) ?? .deg10
        category = Category(rawValue: byte & 0x7f) ?? .D65
    }
    
    public init(angle: Angle, category: Category) {
        self.angle = angle
        self.category = category
    }
}


extension LightSource {
    public enum Angle: UInt8 {
        case deg2,
             deg10
        
        public var string: String {
            switch self {
            case .deg2:
                return "2°C"
            default:
                return "10°C"
            }
        }
        
        
        // MARK: - XYZ 角度系数
        
        // MARK: 系数 X
        public var kx: [Double] {
            switch self {
            case .deg2:
                return [
                    0.0001299,0.0004149,0.001368,0.004243,    //360-390nm
                    0.0143, 0.0435, 0.1344, 0.2839, 0.3483, 0.3362, 0.2908, 0.1954,
                    0.0956, 0.0320, 0.0049, 0.0093, 0.0633, 0.1655, 0.2904, 0.4334,
                    0.5945, 0.7621, 0.9163, 1.0263, 1.0622, 1.0026, 0.8544, 0.6424,
                    0.4479, 0.2835, 0.1649, 0.0874, 0.0468, 0.0227, 0.0114,
                    0.00579,0.002899,0.00144,0.00069,//,0,0,0,0        //710-740nm
                    0.0, 0.0,0.0,0.0 //750-780nm
                ]
            default:
                return [
                    0.0000001222,0.0000059586,0.000159952,0.0023616,    //360-390nm
                    0.0191, 0.0847, 0.2045, 0.3147, 0.3837, 0.3707, 0.3023,
                    0.1956, 0.0805, 0.0162, 0.0038, 0.037465,   0.117749,
                    0.236491,   0.376772,   0.529826,   0.705224,   0.878655,
                    1.01416,    1.11852,    1.12399,    1.03048,    0.856297,
                    0.647467,   0.431567,   0.268329,   0.152568,   0.0812606,
                    0.0408508,  0.0199413,  0.00957688,
                    0.00455263,0.00217496,0.00104476,0.000508258,                //710-740nm
                    0.0, 0.0,0.0,0.0 //750-780nm
                ]
            }
        }
        
        
        // MARK: 系数 Y
        public var ky: [Double] {
            switch self {
            case .deg2:
                return [
                    0.0000039,0.00001239,0.000039,0.00012,    //360-390nm
                    0.0004, 0.0012, 0.0040, 0.0116, 0.0230, 0.0380, 0.0600, 0.0910,
                    0.1390, 0.2080, 0.3230, 0.5030, 0.7100, 0.8620, 0.9540, 0.9950,
                    0.9950, 0.9520, 0.8700, 0.7570, 0.6310, 0.5030, 0.3810, 0.2650,
                    0.1750, 0.1070, 0.0610, 0.0320, 0.0170, 0.0082, 0.0041,
                    0.002091,0.001047,0.00052,0.0002492,        //710-740nm
                    0.0, 0.0,0.0,0.0 //750-780nm
                ]
            default:
                return [
                    0.000000013398,0.0000006511,0.000017364,0.0002534,    //360-390nm
                    0.0020044,  0.008756,   0.021391,   0.038676,   0.062077,
                    0.089456,   0.128201,   0.18519,    0.253589,   0.339133,
                    0.460777,   0.606741,   0.761757,   0.875211,   0.961988,
                    0.991761,   0.99734,    0.955552,   0.868934,   0.777405,
                    0.658341,   0.527963,   0.398057,   0.283493,   0.179828,
                    0.107633,   0.060281,   0.0318004,  0.0159051,  0.0077488,
                    0.00371774,
                    0.00176847,0.00084619,0.00040741,0.00019873,                //710-740nm
                    0.0, 0.0,0.0,0.0 //750-780nm
                ]
            }
        }
        
        // MARK: 系数 Z
        public var kz: [Double] {
            switch self {
            case .deg2:
                return [
                    0.0006061,0.001946,0.00645,0.02005,        //360-390nm
                    0.0679, 0.2074, 0.6456, 1.3856, 1.7471, 1.7721, 1.6692, 1.2876,
                    0.8130, 0.4652, 0.2720, 0.1582, 0.0782, 0.0422, 0.0203, 0.0087,
                    0.0039, 0.0021, 0.0017, 0.0011, 0.0008, 0.0003, 0.0002, 0.0000,
                    0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,
                    0.0000, 0.0000, 0.0000, 0.0000,                //710-740nm
                    0.0, 0.0,0.0,0.0 //750-780nm
                ]
            default:
                return [
                    0.000000535027,0.0000261437,0.000704776,0.0104822,    //360-390nm
                    0.0860109,  0.389366,   0.972542,   1.55348,    1.96728,
                    1.9948, 1.74537,    1.31756,    0.772125,   0.415254,
                    0.218502,   0.112044,   0.060709,   0.030451,   0.013676,
                    0.003988,   0.0,    0.0,    0.0,    0.0,    0.0,    0.0,
                    0.0,    0.0,    0.0,    0.0,    0.0, 0.0,   0.0,    0.0,    0.0,
                    0.0,    0.0,    0.0,    0.0,                //710-740nm
                    0.0, 0.0,0.0,0.0 //750-780nm
                ]
            }
        }
    }
    
    public enum Category: UInt8 {
        case A,
             C,
             D50,
             D55,
             D65,
             D75,
             F1,
             F2,
             F3,
             F4,
             F5,
             F6,
             F7,
             F8,
             F9,
             F10,
             F11,
             F12,
             CWF,
             U30,
             DLF,
             NBF,
             TL83,
             TL84,
             U35,
             B
        
        public var string: String {
            switch self {
            case .A:
                return "A"
            case .C:
                return "C"
            case .D50:
                return "D50"
            case .D55:
                return "D55"
            case .D65:
                return "D65"
            case .D75:
                return "D75"
            case .F1:
                return "F1"
            case .F2:
                return "F2"
            case .F3:
                return "F3"
            case .F4:
                return "F4"
            case .F5:
                return "F5"
            case .F6:
                return "F6"
            case .F7:
                return "F7"
            case .F8:
                return "F8"
            case .F9:
                return "F9"
            case .F10:
                return "F10"
            case .F11:
                return "F11"
            case .F12:
                return "F12"
            case .CWF:
                return "CWF"
            case .U30:
                return "U30"
            case .DLF:
                return "DLF"
            case .NBF:
                return "NBF"
            case .TL83:
                return "TL83"
            case .TL84:
                return "TL84"
            case .U35:
                return "U35"
            case .B:
                return "B"
            }
        }
        
        // MARK: - 光源系数
        public var kl: [Double] {
            switch self {
            case .A:
                return [6.14, 7.82, 9.8, 12.09, 14.7080, 17.6753, 20.9550, 24.6709, 28.7027, 33.0859, 37.8121, 42.8693, 48.2423, 53.9132, 59.8611, 66.0635, 72.4959, 79.1326, 85.9470, 92.9120, 100.000, 107.184, 114.436, 121.731, 129.043, 136.346, 143.618, 150.836, 157.979, 165.028, 171.963, 178.769, 185.429, 191.931, 198.261, 204.41, 210.36, 216.12, 221.67, 0.0, 0.0, 0.0, 0.0]
            case .C:
                return [12.90, 21.40, 33.00, 47.40, 63.30, 80.60, 98.10, 112.40, 121.50, 124.00, 123.10, 123.80, 123.90, 120.70, 112.10, 102.30, 96.90, 98.00, 102.10, 105.20, 105.30, 102.30, 97.80, 93.20, 89.70, 88.40, 88.10, 88.00, 87.80, 88.20, 87.90, 86.80, 84.00, 80.20, 76.30, 72.40, 68.30, 64.40, 61.50, 0.0, 0.0, 0.0, 0.0]
            case .D50:
                return [23.94, 26.96, 24.49, 29.87, 49.31, 56.51, 60.03, 57.82, 74.82, 87.25, 90.61, 91.37, 95.11, 91.96, 95.72, 96.61, 97.13, 102.10, 100.75, 102.32, 100.00, 97.74, 98.92, 93.50, 97.69, 99.27, 99.04, 95.72, 98.86, 95.67, 98.19, 103.00, 99.13, 87.38, 91.60, 92.89, 76.85, 86.51, 92.58, 0.0, 0.0, 0.0, 0.0]
            case .D55:
                return [30.62, 34.31, 32.58, 38.09, 60.95, 68.55, 71.58, 67.91, 85.61, 97.99, 100.46, 99.91, 102.74, 98.08, 100.68, 100.7, 99.99, 104.21, 102.1, 102.97, 100.99, 97.22, 97.75, 91.43, 94.42, 95.14, 94.22, 90.45, 92.33, 88.85, 90.32, 93.95, 89.96, 79.68, 82.84, 84.84, 70.24, 79.30, 84.99, 0.0, 0.0, 0.0, 0.0]
            case .D65:
                return [46.64, 52.09, 49.98, 54.65, 82.7549, 91.486, 93.4318, 86.6823, 104.865, 117.008, 117.812, 114.861, 115.923, 108.811, 109.354, 107.802, 104.79, 107.689, 104.405, 104.046, 100.0, 96.3342, 95.788, 88.6856, 90.0062, 89.5991, 87.6987, 83.2886, 83.6992, 80.0268, 80.2146, 82.2778, 78.2842, 69.7213, 71.6091, 74.35, 61.60, 69.89, 75.09, 0.0, 0.0, 0.0, 0.0]
            case .D75:
                return [62.98, 70.31, 66.70, 69.96, 101.93, 111.89, 112.8, 103.09, 121.2, 133.01, 132.36, 127.32, 126.8, 117.78, 116.59, 113.7, 108.66, 110.44, 106.29, 104.9, 100.00, 95.62, 94.21, 87.00, 87.23, 86.14, 83.58, 78.75, 78.43, 74.8, 74.32, 75.42, 71.58, 63.85, 65.08, 68.07, 56.44, 64.24, 69.15, 0.0, 0.0, 0.0, 0.0]
            case .F1:
                return [0.00, 0.00, 1.87, 2.94, 5.17, 6.13, 7.01, 8.56, 16.94, 11.35, 12.37, 13.00, 13.23, 13.13, 12.52, 11.83, 11.22, 11.03, 11.53, 17.05, 14.33, 15.52, 19.55, 14.91, 13.22, 11.12, 8.95, 7.02, 5.42, 4.15, 3.2, 2.47, 1.93, 1.67, 1.29, 1.08, 0.88, 0.77, 0.73, 0.0, 0.0, 0.0, 0.0]
            case .F2:
                return [0.00, 0.00, 1.18, 1.84, 3.44, 3.85, 4.19, 5.06, 11.81, 6.63, 7.19, 7.54, 7.65, 7.62, 7.28, 7.05, 7.16, 8.04, 10.01, 16.64, 16.16, 18.62, 22.79, 18.66, 16.54, 13.80, 10.95, 8.40, 6.31, 4.68, 3.45, 2.55, 1.89, 1.53, 1.10, 0.88, 0.68, 0.56, 0.51, 0.0, 0.0, 0.0, 0.0]
            case .F3:
                return [0.00, 0.00, 0.82, 1.02, 2.57, 2.7, 2.73, 3.28, 9.47, 4.25, 4.59, 4.8, 4.87, 4.88, 4.67, 4.62, 4.99, 6.25, 8.78, 16.14, 16.63, 19.95, 24.69, 20.85, 18.67, 15.65, 12.45, 9.51, 7.11, 5.22, 3.8, 2.75, 1.99, 1.55, 1.09, 0.83, 0.62, 0.49, 0.43, 0.0, 0.0, 0.0, 0.0 ]
            case .F4:
                return [0.00, 0.00, 0.57, 0.87, 2.01, 1.95, 1.76, 2.1, 8.03, 2.7, 2.91, 3.04, 3.09, 3.14, 3, 3.01, 3.41, 4.69, 7.32, 15.11, 16.33, 20.64, 26.26, 22.94, 20.91, 17.74, 14.42, 10.93, 8.18, 6.00, 4.36, 3.13, 2.24, 1.7, 1.18, 0.88, 0.64, 0.49, 0.42, 0.0, 0.0, 0.0, 0.0]
            case .F5:
                return [0.00, 0.00, 1.87, 2.35, 5.1, 6.00, 6.85, 8.31, 16.06, 10.91, 11.83, 12.4, 12.58, 12.47, 11.89, 11.33, 10.96, 11.16, 12.12, 17.73, 15.2, 16.1, 19.5, 14.64, 12.69, 10.45, 8.29, 6.41, 4.9, 3.72, 2.83, 2.19, 1.71, 1.43, 1.13, 0.96, 0.78, 0.68, 0.65, 0.0, 0.0, 0.0, 0.0]
            case .F6:
                return [0.00, 0.00, 1.05, 1.31, 3.11, 3.43, 3.68, 4.45, 10.74, 5.78, 6.25, 6.52, 6.59, 6.56, 6.28, 6.19, 6.60, 7.94, 10.49, 17.46, 17.22, 19.43, 23.01, 18.56, 16.09, 13.15, 10.25, 7.74, 5.71, 4.16, 3.02, 2.20, 1.60, 1.29, 0.91, 0.71, 0.54, 0.44, 0.40, 0.0, 0.0, 0.0, 0.0]
            case .F7:
                return [0.00, 0.00, 2.56, 3.84, 6.15, 7.37, 7.71, 9.15, 17.52, 12.00, 13.08, 13.71, 13.95, 13.82, 13.43, 13.08, 12.78, 12.44, 12.26, 17.05, 12.58, 12.83, 16.75, 12.67, 12.19, 11.60, 11.12, 10.76, 10.11, 10.02, 9.87, 7.27, 5.83, 5.04, 4.12, 3.46, 2.73, 2.25, 1.90, 0.0, 0.0, 0.0, 0.0]
            case .F8:
                return [0.00, 0.00, 1.21, 1.81, 3.17, 3.83, 3.86, 5.09, 12.42, 8.60, 10.24, 11.33, 11.98, 12.28, 12.35, 12.55, 12.77, 12.60, 12.22, 16.51, 11.76, 11.84, 16.11, 12.53, 12.92, 13.34, 13.87, 14.20, 14.13, 14.50, 14.00, 10.99, 9.22, 8.07, 6.71, 5.63, 4.46, 3.66, 3.09, 0.0, 0.0, 0.0, 0.0]
            case .F9:
                return [0.00, 0.00, 0.90, 1.36, 2.59, 3.05, 2.86, 3.82, 10.77, 6.57, 7.86, 8.75, 9.31, 9.61, 9.74, 10.04, 10.48, 10.76, 11.18, 16.29, 12.74, 13.65, 18.14, 14.65, 14.61, 14.39, 14.47, 14.72, 14.4, 14.88, 15.47, 10.57, 8.25, 7.03, 5.72, 4.80, 3.80, 3.12, 2.64, 0.0, 0.0, 0.0, 0.0]
            case .F10:
                return [0.00, 0.00, 1.11, 0.62, 1.48, 2.12, 3.74, 6.75, 14.86, 10.76, 10.11, 8.29, 7.91, 16.73, 5.94, 2.35, 1.59, 1.80, 40.98, 33.61, 3.38, 2.14, 11.45, 12.16, 6.52, 44.12, 12.09, 10.52, 1.95, 3.19, 2.29, 1.52, 1.47, 1.74, 1.14, 4.49, 0.49, 0.21, 0.24, 0.0, 0.0, 0.0, 0.0]
            case .F11:
                return [0.00, 0.00, 0.91, 0.46, 1.29, 1.59, 2.46, 4.49, 12.13, 7.19, 6.72, 5.46, 5.66, 14.96, 4.72, 1.47, 0.89, 1.18, 39.59, 32.61, 2.83, 1.67, 11.28, 12.73, 7.33, 55.27, 13.18, 12.26, 2.07, 3.58, 2.48, 1.54, 1.46, 2.00, 1.35, 5.58, 0.57, 0.23, 0.24, 0.0, 0.0, 0.0, 0.0]
            case .F12:
                return [0.00, 0.00, 0.96, 0.54, 1.19, 1.12, 1.08, 1.78, 7.90, 2.71, 2.49, 2.10, 3.01, 11.88, 3.43, 0.92, 0.60, 1.10, 34.40, 29.48, 3.08, 2.27, 11.96, 14.27, 9.28, 68.53, 14.67, 14.71, 2.57, 4.18, 2.81, 1.64, 1.49, 2.34, 1.61, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
            case .CWF:
                return [0.00, 0.00, 1.18, 1.84,
                        3.44, 3.85, 4.19, 5.06, 11.81, 6.63, 7.19, 7.54,
                        7.65, 7.62, 7.28, 7.05, 7.16, 8.04, 10.01, 16.64,
                        16.16, 18.62, 22.79, 18.66, 16.54, 13.80, 10.95, 8.40,
                        6.31, 4.68, 3.45, 2.55, 1.89, 1.53, 1.10,
                        0.88, 0.68, 0.56, 0.51]
            case .U30:
                return [0.00, 0.00, 0.96, 0.54,
                        1.19, 1.12, 1.08, 1.78, 7.90, 2.71, 2.49, 2.10,
                        3.01, 11.88, 3.43, 0.92, 0.60, 1.10, 34.40, 29.48,
                        3.08, 2.27, 11.96, 14.27, 9.28, 68.53, 14.67, 14.71,
                        2.57, 4.18, 2.81, 1.64, 1.49, 2.34, 1.61]
            case .DLF:
                return [0.00, 0.00, 2.56, 3.84,
                        6.15, 7.37, 7.71, 9.15, 17.52, 12.00, 13.08, 13.71,
                        13.95, 13.82, 13.43, 13.08, 12.78, 12.44, 12.26, 17.05,
                        12.58, 12.83, 16.75, 12.67, 12.19, 11.60, 11.12, 10.76,
                        10.11, 10.02, 9.87, 7.27, 5.83, 5.04, 4.12,
                        3.46, 2.73, 2.25, 1.90]
            case .NBF:
                return [0.00, 0.00, 0.91, 0.46,
                        1.29, 1.59, 2.46, 4.49, 12.13, 7.19, 6.72, 5.46,
                        5.66, 14.96, 4.72, 1.47, 0.89, 1.18, 39.59, 32.61,
                        2.83, 1.67, 11.28, 12.73, 7.33, 55.27, 13.18, 12.26,
                        2.07, 3.58, 2.48, 1.54, 1.46, 2.00, 1.35,
                        5.58, 0.57, 0.23, 0.24]
            case .TL83:
                return [0.00, 0.00, 0.96, 0.54,
                        1.19, 1.12, 1.08, 1.78, 7.90, 2.71, 2.49, 2.10,
                        3.01, 11.88, 3.43, 0.92, 0.60, 1.10, 34.40, 29.48,
                        3.08, 2.27, 11.96, 14.27, 9.28, 68.53, 14.67, 14.71,
                        2.57, 4.18, 2.81, 1.64, 1.49, 2.34, 1.61]
            case .TL84:
                return [0.00, 0.00, 0.91, 0.46,
                        1.29, 1.59, 2.46, 4.49, 12.13, 7.19, 6.72, 5.46,
                        5.66, 14.96, 4.72, 1.47, 0.89, 1.18, 39.59, 32.61,
                        2.83, 1.67, 11.28, 12.73, 7.33, 55.27, 13.18, 12.26,
                        2.07, 3.58, 2.48, 1.54, 1.46, 2.00, 1.35,
                        5.58, 0.57, 0.23, 0.24]
            case .U35:
                return [0.00, 0.00, 0.82, 1.02,
                        2.57, 2.7, 2.73, 3.28, 9.47, 4.25, 4.59, 4.8,
                        4.87, 4.88, 4.67, 4.62, 4.99, 6.25, 8.78, 16.14,
                        16.63, 19.95, 24.69, 20.85, 18.67, 15.65, 12.45, 9.51,
                        7.11, 5.22, 3.8, 2.75, 1.99, 1.55, 1.09,
                        0.83, 0.62, 0.49, 0.43]
            case .B:
                return [0.00, 0.00, 22.40, 31.30, 41.30, 52.10, 63.20, 73.10, 80.80, 85.40, 88.30, 92.00, 95.20, 96.50, 94.20, 90.70, 89.50, 92.20, 96.90, 101.00, 102.80, 102.60, 101.00, 99.20, 98.00, 98.50, 99.70, 101.00, 102.20, 103.90, 105.00, 104.90, 103.90, 101.60, 99.10, 96.20, 92.90, 89.40, 86.90, 0.0, 0.0, 0.0, 0.0]
            }
        }
    }
    
    // MARK: - 角度和光源类型相关系数
    public var kal: Double {
        if self.angle == .deg2 {
            switch self.category {
            case .A:
                return 0.092684062
            case .C:
                return 0.09392343
            case .D50:
                return 0.095187626
            case .D55:
                return 0.09507290
            case .D65:
                return 0.094625798
            case .D75:
                return 0.09394901
            case .F1:
                return 0.70852368
            case .F2:
                return 0.704856919
            case .F3:
                return 0.70458397
            case .F4:
                return 0.70455217
            case .F5:
                return 0.70718545
            case .F6:
                return 0.704160961
            case .F7:
                return 0.711320291
            case .F8:
                return 0.710406614
            case .F9:
                return 0.70955055
            case .F10:
                return 0.693010279
            case .F11:
                return 0.689129273
            case .F12:
                return 0.684598361
            case .CWF:
                return 0.704856919
            case .U30:
                return 0.684598361
            case .DLF:
                return 0.711320291
            case .NBF:
                return 0.689129273
            case .TL83:
                return 0.684598361
            case .TL84:
                return 0.689129273
            case .U35:
                return 0.70458397
            case .B:
                return 0.0955580424
            }
        } else {
            switch self.category {
            case .A:
                return 0.087889629
            case .C:
                return 0.085134669
            case .D50:
                return 0.087712838
            case .D55:
                return 0.08718461
            case .D65:
                return 0.0860828
            case .D75:
                return 0.08488347
            case .F1:
                return 0.65303785
            case .F2:
                return 0.667289864
            case .F3:
                return 0.67589889
            case .F4:
                return 0.68135389
            case .F5:
                return 0.65414866
            case .F6:
                return 0.670462607
            case .F7:
                return 0.652037151
            case .F8:
                return 0.657517923
            case .F9:
                return 0.66510438
            case .F10:
                return 0.651071267
            case .F11:
                return 0.653252153
            case .F12:
                return 0.655963561
            case .CWF:
                return 0.667289864
            case .U30:
                return 0.655963561
            case .DLF:
                return 0.652037151
            case .NBF:
                return 0.653252153
            case .TL83:
                return 0.655963561
            case .TL84:
                return 0.653252153
            case .U35:
                return 0.67589889
            case .B:
                return 0.0955580424
            }
        }
    }
    
    
    // MARK: - XYZ LabCH 转换系数
    public var kxyz_labch: [Double] {
        if self.angle == .deg2 {
            switch self.category {
            case .A:
                return [109.85, 100.00, 35.58]
            case .C:
                return [98.04, 100.00, 118.10]
            case .D50:
                return [96.42, 100.00, 82.49]
            case .D55:
                return [95.68, 100.00, 92.14]
            case .D65:
                return [95.04, 100.00, 108.88]
            case .D75:
                return [94.96, 100.00, 122.61]
            case .F1:
                return [92.19, 100.00, 91.54]
            case .F2:
                return [98.81, 100.00, 55.82]
            case .F3:
                return [103.64, 100.00, 38.32]
            case .F4:
                return [109.28, 100.00, 27.06]
            case .F5:
                return [90.28, 100.00, 87.44]
            case .F6:
                return [97.00, 100.00, 49.18]
            case .F7:
                return [94.72, 100.00, 97.16]
            case .F8:
                return [96.66, 100.00, 72.50]
            case .F9:
                return [100.66, 100.00, 57.38]
            case .F10:
                return [97.98, 100.00, 71.03]
            case .F11:
                return [103.12, 100.00, 51.53]
            case .F12:
                return [126.15, 100.00, 19.73]
            case .CWF:
                return [98.81, 100.00, 55.82]
            case .U30:
                return [126.15, 100.00, 19.73]
            case .DLF:
                return [94.72, 100.00, 97.16]
            case .NBF:
                return [103.12, 100.00, 51.53]
            case .TL83:
                return [126.15, 100.00, 19.73]
            case .TL84:
                return [103.12, 100.00, 51.53]
            case .U35:
                return [103.64, 100.00, 38.32]
            case .B:
                return [99.06, 100.00, 85.22]
            }
        } else {
            switch self.category {
            case .A:
                return [111.14, 100.00, 35.2]
            case .C:
                return [97.29, 100.00, 116.14]
            case .D50:
                return [96.72, 100.00, 81.41]
            case .D55:
                return [95.80, 100.00, 90.97]
            case .D65:
                return [94.81, 100.00, 107.32]
            case .D75:
                return [94.43, 100.00, 120.71]
            case .F1:
                return [93.95, 100.00, 90.53]
            case .F2:
                return [102.80, 100.00, 56.75]
            case .F3:
                return [108.78, 100.00, 39.53]
            case .F4:
                return [115.03, 100.00, 28.19]
            case .F5:
                return [92.59, 100.00, 86.82]
            case .F6:
                return [101.74, 100.00, 50.29]
            case .F7:
                return [95.20, 100.00, 95.68]
            case .F8:
                return [97.06, 100.00, 70.80]
            case .F9:
                return [102.15, 100.00, 56.72]
            case .F10:
                return [100.32, 100.00, 71.49]
            case .F11:
                return [105.76, 100.00, 52.11]
            case .F12:
                return [129.06, 100.00, 19.86]
            case .CWF:
                return [102.80, 100.00, 56.75]
            case .U30:
                return [129.06, 100.00, 19.86]
            case .DLF:
                return [95.20, 100.00, 95.68]
            case .NBF:
                return [105.76, 100.00, 52.11]
            case .TL83:
                return [129.06, 100.00, 19.86]
            case .TL84:
                return [105.76, 100.00, 52.11]
            case .U35:
                return [108.78, 100.00, 39.53]
            case .B:
                return [99.06, 100.00, 85.22]
            }
        }
    }
}
